home *** CD-ROM | disk | FTP | other *** search
- #include <math.h>
- #include "matrix.hxx"
- #include "Cheb_vector.hxx"
- #include "ekpanel.hxx"
- #include "ekman.hxx"
-
- /*
- -*++ ekman_layer::ekman_layer(): constructor
- **
- ** (*++ history:
- ** 16 Jan 88 Bruce & Creation date
- ** ++*)
- **
- ** (*++ detailed:
- ** ++*)
- */
-
- ekman_layer::ekman_layer(int initial_modes) :
- ekman_physical_vector(initial_modes), ekman_pumping_vector(initial_modes)
- {
- dc_value = 1;
- ac_value = 0;
- ac_waves = 0 ;
- nmodes = initial_modes;
- xldomain = -1;
- xrdomain = 1;
- double wn = 2.0 * M_PI * ac_waves / (xrdomain - xldomain);
- for (int i = 0; i < nmodes; i++){
- double X = cos(M_PI * (double(i) + 0.5) / nmodes);
- ekman_physical_vector[i] =
- dc_value + ac_value * sin (wn * X);
- }
- // cout << "init: ekman_physical_vector = " << ekman_physical_vector << "\n";
- // cout.flush();
- // cout << "init: ekman_physical_vector.Chebyshev() = " <<
- // ekman_physical_vector.Chebyshev() << "\n";
- // cout.flush();
- ekman_pumping_vector = ekman_physical_vector.Chebyshev();
- // cout << "init: ekman_pumping_vector = " << ekman_pumping_vector << "\n";
- // cout.flush();
- }
-
-
- /*
- -*++ ekman_layer::update():
- **
- ** (*++ history:
- ** 13 Jan 88 Bruce Eckel Creation date
- ** 14 Jan 88 Tom Keffer Non-linear X values
- ** ++*)
- **
- ** (*++ detailed:
- ** ++*)
- */
-
- void ekman_layer::update(ekpanel & ekman_control_panel) {
- if (ekman_control_panel.changed()) {
- dc_value = ekman_control_panel.dc_value();
- ac_value = ekman_control_panel.ac_value();
- ac_waves = ekman_control_panel.ac_waves();
- nmodes = ekman_control_panel.resolution();
- xldomain = ekman_control_panel.xldomain();
- xrdomain = ekman_control_panel.xrdomain();
-
- double wn = 2.0 * M_PI * ac_waves / (xrdomain - xldomain);
- if (ekman_control_panel.new_resolution())
- ekman_physical_vector = *new phys_vector(nmodes);
- for (int i = 0; i < nmodes; i++){
- double X = cos(M_PI * (double(i) + 0.5) / nmodes);
- ekman_physical_vector[i] =
- dc_value + ac_value * sin (wn * X);
- }
- ekman_pumping_vector = ekman_physical_vector.Chebyshev();
- ekman_control_panel.reset();
- }
- }